package com.foodndate.food.coupon;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
/*
 * 파일등록,수정,페이지처리*/
@Service
public class CouponService {
	
	@Autowired private CouponDAO dao;
	//쿠폰등록
	public void insert(CouponDTO dto){
		
		System.out.println("MultipartFilet시작");
		MultipartFile file=dto.getFile();
		
		String originName = file.getOriginalFilename();
		String extend = originName.substring(originName.lastIndexOf(".") - 1, originName.length());
		//파일명 마지막부터 확장자까지
		
		//String imageName = file.getOriginalFilename();
		String imageName = System.currentTimeMillis() + file.getSize() + extend;
		//현재시간+파일사이즈+extend를 더해 파일명을 다시 만듦
		String path="C:/Team/workspace/food/src/main/webapp/resources/coupon";
		
				
		try{
			file.transferTo(new File(path+"/"+imageName));  //해당하는 경로에 파일 저장
		}
		catch (IllegalStateException e){
			System.out.println("쿠폰등록 IllegalStateException:");
			e.printStackTrace();
		}
		catch (IOException e){
			System.out.println("IOException오류:");
			e.printStackTrace();
		}
		dto.setCoupon_image(imageName);
		dao.insert(dto);
	}
	//쿠폰수정
	public void edit(CouponDTO dto){
		System.out.println("MultipartFilet 수정 시작");
		MultipartFile file=dto.getFile();
		
		String originName = file.getOriginalFilename();
		String extend = originName.substring(originName.lastIndexOf(".") - 1, originName.length());
		//파일명 마지막부터 확장자까지
		
		//String imageName = file.getOriginalFilename();
		String imageName = System.currentTimeMillis() + file.getSize() + extend;
		//현재시간+파일사이즈+extend를 더해 파일명을 다시 만듦
		String path="C:/Team/workspace/food/src/main/webapp/resources/coupon";
		
				
		try{
			file.transferTo(new File(path+"/"+imageName));  //해당하는 경로에 파일 저장
		}
		catch (IllegalStateException e){
			System.out.println("쿠폰수정 IllegalStateException:");
			e.printStackTrace();
		}
		catch (IOException e){
			System.out.println("IOException오류:");
			e.printStackTrace();
		}
		dto.setCoupon_image(imageName);
		dao.update(dto);
	}
	
	
	//쿠폰리스트페이지
	public CouponListDTO list(CouponDTO dto, CouponListDTO cdto){
		int curPage=1;
		
		if(dto.getCurPage()!=null){
			curPage=Integer.parseInt(dto.getCurPage());
		}
		
		int numPerPage=12;//페이지당 레코드개수
		int startRow=(curPage-1)*numPerPage+1; //1
		int endRow=curPage*numPerPage;//10
		
		dto.setStartrow(startRow);
		dto.setEndrow(endRow);
		
		//총페이지수 (마지막 페이지번호)
		int totalPage=0;
		int totalRecord=0;
		
		totalRecord=dao.record(dto);
		
		
		if (totalRecord % numPerPage == 0) {
			totalPage = totalRecord / numPerPage;
		} else {
			totalPage = totalRecord / numPerPage + 1;
		}
		
		int pagePerBlock = 10;//블록마다 페이지 링크가 몇개인가?
		int block = 0;//페이지를 그룹화할 때 그룹번호를 저장할 변수
		//curPage 가 속한 블록번호는 curPage 로 부터 구할 수 있다.
		if (curPage % pagePerBlock == 0) {
			block = curPage / pagePerBlock;
		} else {
			block = curPage / pagePerBlock + 1;
		}
		int firstPage = 0;
		int lastPage = 0;
		firstPage = (block - 1) * pagePerBlock + 1;
		lastPage = block * pagePerBlock;
		
		//totalPage(총페이지수) = 마지막페이지번호
		int nextPage = 0;		
		if (lastPage >= totalPage) {//마지막 블록
			lastPage = totalPage;
		} else {//마지막 블록이 아니면
			nextPage = lastPage + 1;
		}
		
		
		//[이전] [다음]링크번호를 구하는 코드
		int prevPage = 0;
		
		if (block > 1) {
			prevPage = firstPage - 1;
		}
		

		
		
		cdto.setPrevPage(prevPage);
		cdto.setNextPage(nextPage);	
		cdto.setFirstPage(firstPage);
		cdto.setLastPage(lastPage);
		cdto.setCurPage(curPage);
		cdto.setListcount(totalRecord);
		
		List<CouponDTO> clist=dao.list(dto);
		
		cdto.setList(clist);
		return cdto;
		

		
		
		
		

	}
	//조회수
		public CouponListDTO list_readcnt(CouponDTO dto, CouponListDTO cdto){
			int curPage=1;
			
			if(dto.getCurPage()!=null){
				curPage=Integer.parseInt(dto.getCurPage());
			}
			
			int numPerPage=12;//페이지당 레코드개수
			int startRow=(curPage-1)*numPerPage+1; //1
			int endRow=curPage*numPerPage;//10
			
			dto.setStartrow(startRow);
			dto.setEndrow(endRow);
			
			//총페이지수 (마지막 페이지번호)
			int totalPage=0;
			int totalRecord=0;
			
			totalRecord=dao.record(dto);
			
			
			if (totalRecord % numPerPage == 0) {
				totalPage = totalRecord / numPerPage;
			} else {
				totalPage = totalRecord / numPerPage + 1;
			}
			
			int pagePerBlock = 10;//블록마다 페이지 링크가 몇개인가?
			int block = 0;//페이지를 그룹화할 때 그룹번호를 저장할 변수
			//curPage 가 속한 블록번호는 curPage 로 부터 구할 수 있다.
			if (curPage % pagePerBlock == 0) {
				block = curPage / pagePerBlock;
			} else {
				block = curPage / pagePerBlock + 1;
			}
			int firstPage = 0;
			int lastPage = 0;
			firstPage = (block - 1) * pagePerBlock + 1;
			lastPage = block * pagePerBlock;
			
			//totalPage(총페이지수) = 마지막페이지번호
			int nextPage = 0;		
			if (lastPage >= totalPage) {//마지막 블록
				lastPage = totalPage;
			} else {//마지막 블록이 아니면
				nextPage = lastPage + 1;
			}
			
			
			//[이전] [다음]링크번호를 구하는 코드
			int prevPage = 0;
			
			if (block > 1) {
				prevPage = firstPage - 1;
			}
			

			
			
			cdto.setPrevPage(prevPage);
			cdto.setNextPage(nextPage);	
			cdto.setFirstPage(firstPage);
			cdto.setLastPage(lastPage);
			cdto.setCurPage(curPage);
			cdto.setListcount(totalRecord);
			
			List<CouponDTO> clist=dao.list_readcnt(dto);
			
			cdto.setList(clist);
			return cdto;
			

			
			
			
			

		}
	
	//할인률

		public CouponListDTO list_discount(CouponDTO dto, CouponListDTO cdto){
			int curPage=1;
			
			if(dto.getCurPage()!=null){
				curPage=Integer.parseInt(dto.getCurPage());
			}
			
			int numPerPage=12;//페이지당 레코드개수
			int startRow=(curPage-1)*numPerPage+1; //1
			int endRow=curPage*numPerPage;//10
			
			dto.setStartrow(startRow);
			dto.setEndrow(endRow);
			
			//총페이지수 (마지막 페이지번호)
			int totalPage=0;
			int totalRecord=0;
			
			totalRecord=dao.record(dto);	//전체 쿠폰의 갯수를 가져와서 넣어줌
			
			
			if (totalRecord % numPerPage == 0) {
				totalPage = totalRecord / numPerPage;
			} else {
				totalPage = totalRecord / numPerPage + 1;
			}
			
			int pagePerBlock = 10;//블록마다 페이지 링크가 몇개인가?
			int block = 0;//페이지를 그룹화할 때 그룹번호를 저장할 변수
			//curPage 가 속한 블록번호는 curPage 로 부터 구할 수 있다.
			if (curPage % pagePerBlock == 0) {
				block = curPage / pagePerBlock;
			} else {
				block = curPage / pagePerBlock + 1;
			}
			int firstPage = 0;
			int lastPage = 0;
			firstPage = (block - 1) * pagePerBlock + 1;
			lastPage = block * pagePerBlock;
			
			//totalPage(총페이지수) = 마지막페이지번호
			int nextPage = 0;		
			if (lastPage >= totalPage) {//마지막 블록
				lastPage = totalPage;
			} else {//마지막 블록이 아니면
				nextPage = lastPage + 1;
			}
			
			
			//[이전] [다음]링크번호를 구하는 코드
			int prevPage = 0;
			
			if (block > 1) {
				prevPage = firstPage - 1;
			}
			

			
			
			cdto.setPrevPage(prevPage);
			cdto.setNextPage(nextPage);	
			cdto.setFirstPage(firstPage);
			cdto.setLastPage(lastPage);
			cdto.setCurPage(curPage);
			cdto.setListcount(totalRecord);
			
			List<CouponDTO> clist=dao.list_discount(dto);
			
			cdto.setList(clist);
			return cdto;
			

			
			
			
			

		}
	//오늘까지
		public CouponListDTO list_today(CouponDTO dto, CouponListDTO cdto){
			int curPage=1;
			
			if(dto.getCurPage()!=null){
				curPage=Integer.parseInt(dto.getCurPage());
			}
			
			int numPerPage=12;//페이지당 레코드개수
			int startRow=(curPage-1)*numPerPage+1; //1
			int endRow=curPage*numPerPage;//10
			
			dto.setStartrow(startRow);
			dto.setEndrow(endRow);
			
			//총페이지수 (마지막 페이지번호)
			int totalPage=0;
			int totalRecord=0;
			
			totalRecord=dao.record_today(dto);		//전체쿠폰 중 오늘까지 유효한 쿠폰의 갯수만 세어 넣어줌
			
			
			if (totalRecord % numPerPage == 0) {
				totalPage = totalRecord / numPerPage;
			} else {
				totalPage = totalRecord / numPerPage + 1;
			}
			
			int pagePerBlock = 10;//블록마다 페이지 링크가 몇개인가?
			int block = 0;//페이지를 그룹화할 때 그룹번호를 저장할 변수
			//curPage 가 속한 블록번호는 curPage 로 부터 구할 수 있다.
			if (curPage % pagePerBlock == 0) {
				block = curPage / pagePerBlock;
			} else {
				block = curPage / pagePerBlock + 1;
			}
			int firstPage = 0;
			int lastPage = 0;
			firstPage = (block - 1) * pagePerBlock + 1;
			lastPage = block * pagePerBlock;
			
			//totalPage(총페이지수) = 마지막페이지번호
			int nextPage = 0;		
			if (lastPage >= totalPage) {//마지막 블록
				lastPage = totalPage;
			} else {//마지막 블록이 아니면
				nextPage = lastPage + 1;
			}
			
			
			//[이전] [다음]링크번호를 구하는 코드
			int prevPage = 0;
			
			if (block > 1) {
				prevPage = firstPage - 1;
			}
			

			
			
			cdto.setPrevPage(prevPage);
			cdto.setNextPage(nextPage);	
			cdto.setFirstPage(firstPage);
			cdto.setLastPage(lastPage);
			cdto.setCurPage(curPage);
			cdto.setListcount(totalRecord);
			
			List<CouponDTO> clist=dao.list_today(dto);
			
			cdto.setList(clist);
			return cdto;
			

			
			
			
			

		}
}
